package skiree.host.abetsy;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;

public class CompletableFutureExample {

    // 模拟异步方法，返回List
    public static List<String> methodA() {
        List<String> list = new ArrayList<>();
        try {
            Thread.sleep(5000);
        }catch (Exception ignore) {}
        list.add("A");
        return list;
    }

    public static List<String> methodB() {
        List<String> list = new ArrayList<>();
        try {
            Thread.sleep(1000);
        }catch (Exception ignore) {}
        list.add("B");
        return list;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 同时执行两个方法
        CompletableFuture<List<String>> futureA = CompletableFuture.supplyAsync(CompletableFutureExample::methodA);
        CompletableFuture<List<String>> futureB = CompletableFuture.supplyAsync(CompletableFutureExample::methodB);

        // 使用anyOf等待任何一个完成，然后使用join获取结果
        CompletableFuture<Object> anyOf = CompletableFuture.anyOf(futureA, futureB);

        // 等待至少一个Future完成
        anyOf.get(); // 注意：这里只是等待至少一个完成，但不获取结果

        // 检查哪个Future先完成并获取其结果
        if (futureA.isDone()) {
            List<String> tempA = futureA.join();
            if (!tempA.isEmpty()) {
                // 打印结果
                System.out.println(tempA);
            }else {
                System.out.println(futureB.join());
            }
        }else {
            List<String> tempB = futureB.join();
            if (!tempB.isEmpty()) {
                // 打印结果
                System.out.println(tempB);
            }else {
                System.out.println(futureA.join());
            }
        }
    }
}